home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************************
- * ISO MPEG Audio Subgroup Software Simulation Group (1996)
- * ISO 13818-3 MPEG-2 Audio Encoder - Lower Sampling Frequency Extension
- *
- * $Id: mdct.c,v 1.1 1996/02/14 04:04:23 rowlands Exp $
- *
- * $Log: mdct.c,v $
- * Revision 1.1 1996/02/14 04:04:23 rowlands
- * Initial revision
- *
- * Received from Mike Coleman
- **********************************************************************/
-
- #include "common.h"
- #include "l3side.h"
- #include "mdct.h"
-
- double ca[8], cs[8];
-
- /*
- This is table B.9: coefficients for aliasing reduction
- */
- static double c[8] = { -0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142, -0.0037 };
-
- void mdct_sub( L3SBS (*sb_sample), double (*mdct_freq)[2][576], int stereo, III_side_info_t *l3_side, int mode_gr )
- {
- gr_info *cod_info;
- double mdct_in[36];
- int ch,gr,band,k,j;
- double bu,bd;
- static int init = 0;
- int block_type;
- double (*mdct_enc)[2][32][18] = (double (*)[2][32][18]) mdct_freq;
-
- if ( init == 0 )
- {
- /* prepare the aliasing reduction butterflies */
- for ( k = 0; k < 8; k++ )
- {
- double sq;
- sq = sqrt( 1.0 + c[k] * c[k] );
- ca[k] = c[k] / sq;
- cs[k] = 1.0 / sq;
- }
- init++;
- }
-
- for ( gr = 0; gr < mode_gr; gr++ )
- for ( ch = 0; ch < stereo; ch++ )
- {
- cod_info = (gr_info *) &(l3_side->gr[gr].ch[ch]) ;
- block_type = cod_info->block_type;
-
- /*
- Compensate for inversion in the analysis filter
- */
- for ( band = 1; band < 32; band+=2 )
- for ( k = 1; k < 18; k+=2 )
- (*sb_sample)[ch][gr+1][k][band] *= -1.0;
-
- /*
- Perform imdct of 18 previous subband samples
- + 18 current subband samples
- */
- for ( band = 0; band < 32; band++ )
- {
- for ( k = 0; k < 18; k++ )
- {
- mdct_in[k] = (*sb_sample)[ch][ gr ][k][band];
- mdct_in[k+18] = (*sb_sample)[ch][gr+1][k][band];
- }
- #ifdef ALLOW_MIXED
- if ( cod_info->mixed_block_flag && (band < 2) )
- block_type = 0;
- #endif
- mdct( mdct_in, &mdct_enc[gr][ch][band][0], block_type );
- }
-
- /*
- Perform aliasing reduction butterfly
- on long blocks
- */
- if ( block_type != 2 )
- for ( band = 0; band < 31; band++ )
- for ( k = 0; k < 8; k++ )
- {
- bu = mdct_enc[gr][ch][band][17-k] * cs[k] + mdct_enc[gr][ch][band+1][k] * ca[k];
- bd = mdct_enc[gr][ch][band+1][k] * cs[k] - mdct_enc[gr][ch][band][17-k] * ca[k];
- mdct_enc[gr][ch][band][17-k] = bu;
- mdct_enc[gr][ch][band+1][k] = bd;
- }
-
- }
-
- /*
- Save latest granule's subband samples to be used in
- the next mdct call
- */
- for ( ch = 0; ch < stereo; ch++ )
- for ( j = 0; j < 18; j++ )
- for ( band = 0; band < 32; band++ )
- (*sb_sample)[ch][0][j][band] = (*sb_sample)[ch][mode_gr][j][band];
- }
-
- void mdct( double *in, double *out, int block_type )
- {
- /*-------------------------------------------------------------------*/
- /* */
- /* Function: Calculation of the MDCT */
- /* In the case of long blocks ( block_type 0,1,3 ) there are */
- /* 36 coefficents in the time domain and 18 in the frequency */
- /* domain. */
- /* In the case of short blocks (block_type 2 ) there are 3 */
- /* transformations with short length. This leads to 12 coefficents */
- /* in the time and 6 in the frequency domain. In this case the */
- /* results are stored side by side in the vector out[]. */
- /* */
- /* New layer3 */
- /* */
- /*-------------------------------------------------------------------*/
-
- int l,k,i,m,N;
- double sum;
- static double win[4][36];
- static int init = 0;
- static double cos_s[6][12], cos_l[18][18];
- static double fin[18];
- static double *cos_l0;
-
- if ( init == 0 )
- {
- /* type 0 */
- for ( i = 0; i < 36; i++ )
- win[0][i] = sin( PI/36 * (i + 0.5) );
- /* type 1*/
- for ( i = 0; i < 18; i++ )
- win[1][i] = sin( PI/36 * (i + 0.5) );
- for ( i = 18; i < 24; i++ )
- win[1][i] = 1.0;
- for ( i = 24; i < 30; i++ )
- win[1][i] = sin( PI/12 * ( i + 0.5 - 18) );
- for ( i = 30; i < 36; i++ )
- win[1][i] = 0.0;
- /* type 3*/
- for ( i = 0; i < 6; i++ )
- win[3][i] = 0.0;
- for ( i = 6; i < 12; i++ )
- win[3][i] = sin( PI/12 * (i + 0.5 - 6) );
- for ( i = 12; i < 18; i++ )
- win[3][i] = 1.0;
- for ( i = 18; i < 36; i++ )
- win[3][i] = sin( PI/36 * (i + 0.5) );
-
- N = 12;
- for ( m = 0; m < N / 2; m++ )
- for ( k = 0; k < N; k++ )
- cos_s[m][k] = cos( (PI /(2 * N)) * (2 * k + 1 + N / 2) *
- (2 * m + 1) ) / (N / 4) * sin( PI/12 * (k + 0.5) );
-
- N = 36;
- for ( m = 0; m < N / 2; m++ )
- {
- for ( k = 0; k < 9; k++ )
- {
- cos_l[m][k] = cos( (PI / (2 * N)) * (2 * k + 1 + N / 2) *
- (2 * m + 1) ) / (N / 4);
- cos_l[m][9+k] = cos( (PI / (2 * N)) * (2 * (18 + k) + 1 + N / 2) *
- (2 * m + 1) ) / (N / 4);
- }
- }
- init++;
- }
-
- if ( block_type == 2)
- {
- N = 12;
- for ( l = 0; l < 3; l++ )
- {
- for ( m = 0; m < N / 2; m++ )
- {
- for ( sum = 0.0, k = 0; k < N; k++ )
- sum += in[k + 6 * l + 6] * cos_s[m][k];
- out[ 3 * m + l] = sum;
- }
- }
- }
- else
- {
- for (k=0;k<9;k++)
- {
- fin[k] = win[block_type][k] * in[k] - win[block_type][17-k] * in[17-k];
- fin[9+k] = win[block_type][18+k] * in[18+k] + win[block_type][35-k] * in[35-k];
- }
-
- /* 0 */
- cos_l0= &cos_l[0][0];
- sum = ( fin[0] ) * *cos_l0; /* 17 */
- sum += ( fin[1] ) * *++cos_l0; /* 15 */
- sum += ( fin[2] ) * *++cos_l0; /* 13 */
- sum += ( fin[3] ) * *++cos_l0; /* 11 */
- sum += ( fin[4] ) * *++cos_l0; /* 9 */
- sum += ( fin[5] ) * *++cos_l0; /* 7 */
- sum += ( fin[6] ) * *++cos_l0; /* 5 */
- sum += ( fin[7] ) * *++cos_l0; /* 3 */
- sum += ( fin[8] ) * *++cos_l0; /* 1 */
- sum += ( fin[9] ) * *++cos_l0; /* 19*/
- sum += ( fin[10] ) * *++cos_l0; /* 21 */
- sum += ( fin[11] ) * *++cos_l0; /* 23 */
- sum += ( fin[12] ) * *++cos_l0; /*25 */
- sum += ( fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[14] ) * *++cos_l0; /* 29 */
- sum += ( fin[15] ) * *++cos_l0; /* 31*/
- sum += ( fin[16] ) * *++cos_l0; /* 33 */
- sum += ( fin[17] ) * *++cos_l0; /* 35 */
- out[0]=sum;
-
-
- /* 1 */
- sum = ( fin[2]+fin[3]+fin[17] ) * cos_l[1][2]; /* mfc=3 2*/
- sum += ( fin[1]+fin[4]+fin[16] ) * cos_l[1][1]; /* mfc=9 1*/
- sum += ( fin[0]+fin[5]+fin[15] ) * *++cos_l0; /* mfc=15 0*/
- sum += ( fin[6]-fin[9]+fin[14] ) * *(cos_l0+=6); /* mfc=21 6*/
- sum += ( fin[7]-fin[10]+fin[13] ) * *++cos_l0; /* mfc=27 7*/
- sum += ( fin[8]-fin[11]+fin[12] ) * *++cos_l0; /* mfc = 28 8*/
- out[1]=sum;
-
- /* 2 */
- cos_l0= &cos_l[2][0];
- sum = ( fin[0] ) * *cos_l0; /* mfc 23 */
- sum += ( fin[1] ) * *++cos_l0; /* mfc 33 */
- sum += ( fin[2] ) * *++cos_l0; /* mfc 29 */
- sum += ( fin[3] ) * *++cos_l0; /* mfc 19 */
- sum += ( fin[4] ) * *++cos_l0; /* mfc 9 */
- sum += ( fin[5] ) * *++cos_l0; /* mfc 1 */
- sum += ( fin[6] ) * *++cos_l0; /* mfc 11 */
- sum += ( fin[7] ) * *++cos_l0; /* mfc 21 */
- sum += ( fin[8] ) * *++cos_l0; /* mfc 31 */
- sum += ( fin[9] ) * *++cos_l0; /* mfc 13 */
- sum += ( fin[10] ) * *++cos_l0; /* mfc 3 */
- sum += ( fin[11] ) * *++cos_l0; /* mfc 7 */
- sum += ( fin[12] ) * *++cos_l0; /* mfc 17 */
- sum += ( fin[13] ) * *++cos_l0; /* mfc 27 */
- sum += ( fin[14] ) * *++cos_l0; /* mfc 35 */
- sum += ( fin[15] ) * *++cos_l0; /* mfc 25 */
- sum += ( fin[16] ) * *++cos_l0; /* mfc 15 */
- sum += ( fin[17] ) * *++cos_l0; /* mfc 5 */
- out[2]=sum;
-
- /* 3 */;
- sum = ( fin[0] ) * *++cos_l0; /* mfc 11 */
- sum += ( fin[1] ) * *++cos_l0; /* mfc 3 */
- sum += ( fin[2] ) * *++cos_l0; /* 17 */
- sum += ( fin[3] ) * *++cos_l0; /* 31 */
- sum += ( fin[4] ) * *++cos_l0; /* 27 */
- sum += ( fin[5] ) * *++cos_l0; /* 13 */
- sum += ( fin[6] ) * *++cos_l0; /* 1 */
- sum += ( fin[7] ) * *++cos_l0; /* 15 */
- sum += ( fin[8] ) * *++cos_l0; /* 29 */
- sum += ( fin[9] ) * *++cos_l0; /* 25 */
- sum += ( fin[10] ) * *++cos_l0; /* 33 */
- sum += ( fin[11] ) * *++cos_l0; /* 19 */
- sum += ( fin[12] ) * *++cos_l0; /* 5 */
- sum += ( fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[14] ) * *++cos_l0; /* 23 */
- sum += ( fin[15] ) * *++cos_l0; /* 35 */
- sum += ( fin[16] ) * *++cos_l0; /* 21 */
- sum += ( fin[17] ) * *++cos_l0; /* 7 */
- out[3]=sum;
-
- /* 4 */
- /* mfc 27 */
- sum = ( fin[0]-fin[1]-fin[4]+fin[5]+fin[8] \
- -fin[11]+fin[12]+fin[15]-fin[16] ) * *++cos_l0;
- /* mfc 9 */
- sum += ( -fin[2]-fin[3]+fin[6]+fin[7]-fin[9]-fin[10] \
- +fin[13]+fin[14]-fin[17] ) * cos_l[4][6];
- out[4]=sum;
-
- /* 5 */
- cos_l0= &cos_l[5][0];
- sum = ( fin[0] ) * *cos_l0; /* 7 */
- sum += ( fin[1] ) * *++cos_l0; /* 15 */
- sum += ( fin[2] ) * *++cos_l0; /* 35 */
- sum += ( fin[3] ) * *++cos_l0; /* 13 */
- sum += ( fin[4] ) * *++cos_l0; /* 9 */
- sum += ( fin[5] ) * *++cos_l0; /* 31 */
- sum += ( fin[6] ) * *++cos_l0; /* 19 */
- sum += ( fin[7] ) * *++cos_l0; /* 3 */
- sum += ( fin[8] ) * *++cos_l0; /* 8 */
- sum += ( fin[9] ) * *++cos_l0; /* 29 */
- sum += ( fin[10] ) * *++cos_l0; /* 21 */
- sum += ( fin[11] ) * *++cos_l0; /* 1 */
- sum += ( fin[12] ) * *++cos_l0; /* 23 */
- sum += ( fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[14] ) * *++cos_l0; /* 5 */
- sum += ( fin[15] ) * *++cos_l0; /* 17 */
- sum += ( fin[16] ) * *++cos_l0; /* 33 */
- sum += ( fin[17] ) * *++cos_l0; /* 11 */
- out[5]=sum;
-
- /* 6 */
- sum = ( fin[0] ) * *++cos_l0; /* 31 */
- sum += ( fin[1] ) * *++cos_l0; /* 15 */
- sum += ( fin[2] ) * *++cos_l0; /* 11 */
- sum += ( fin[3] ) * *++cos_l0; /* 35 */
- sum += ( fin[4] ) * *++cos_l0; /* 9 */
- sum += ( fin[5] ) * *++cos_l0; /* 17 */
- sum += ( fin[6] ) * *++cos_l0; /* 29 */
- sum += ( fin[7] ) * *++cos_l0; /* 3 */
- sum += ( fin[8] ) * *++cos_l0; /* 23 */
- sum += ( fin[9] ) * *++cos_l0; /* 5 */
- sum += ( fin[10] ) * *++cos_l0; /* 21 */
- sum += ( fin[11] ) * *++cos_l0; /* 25 */
- sum += ( fin[12] ) * *++cos_l0; /* 1 */
- sum += ( fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[14] ) * *++cos_l0; /* 19 */
- sum += ( fin[15] ) * *++cos_l0; /* 7 */
- sum += ( fin[16] ) * *++cos_l0; /* 33 */
- sum += ( fin[17] ) * *++cos_l0; /* 13 */
- out[6]=sum;
-
- /* 7 */
- sum = ( fin[0]+fin[5]+fin[15] ) * *++cos_l0; /* 3 */
- sum += ( fin[1]+fin[4]+fin[16] ) * *++cos_l0; /* 27*/
- sum += ( fin[2]+fin[3]+fin[17] ) * *++cos_l0; /* 15 */
- sum += ( fin[6]-fin[9]+fin[14] ) * *(cos_l0+=4); /* 33 */
- sum += ( fin[7]-fin[10]+fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[8]-fin[11]+fin[12] ) * *++cos_l0; /* 21 */
- out[7]=sum;
-
- /* 8 */
- cos_l0= &cos_l[8][0];
- sum = ( fin[0] ) * *cos_l0; /* 35 */
- sum += ( fin[1] ) * *++cos_l0; /* 3 */
- sum += ( fin[2] ) * *++cos_l0; /* 31 */
- sum += ( fin[3] ) * *++cos_l0; /* 7 */
- sum += ( fin[4] ) * *++cos_l0; /* 27*/
- sum += ( fin[5] ) * *++cos_l0; /* 11 */
- sum += ( fin[6] ) * *++cos_l0; /* 23 */
- sum += ( fin[7] ) * *++cos_l0; /* 15*/
- sum += ( fin[8] ) * *++cos_l0; /* 19 */
- sum += ( fin[9] ) * *++cos_l0; /* 1 */
- sum += ( fin[10] ) * *++cos_l0; /* 33 */
- sum += ( fin[11] ) * *++cos_l0; /* 5 */
- sum += ( fin[12] ) * *++cos_l0; /* 29*/
- sum += ( fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[14] ) * *++cos_l0; /* 25 */
- sum += ( fin[15] ) * *++cos_l0; /* 13*/
- sum += ( fin[16] ) * *++cos_l0; /* 21 */
- sum += ( fin[17] ) * *++cos_l0; /* 17 */
- out[8]=sum;
-
- /* 9 */
- sum = ( fin[0] ) * *++cos_l0; /* 1 */
- sum += ( fin[1] ) * *++cos_l0; /* 33 */
- sum += ( fin[2] ) * *++cos_l0; /* 5 */
- sum += ( fin[3] ) * *++cos_l0; /* 29*/
- sum += ( fin[4] ) * *++cos_l0; /* 9 */
- sum += ( fin[5] ) * *++cos_l0; /* 25 */
- sum += ( fin[6] ) * *++cos_l0; /* 13 */
- sum += ( fin[7] ) * *++cos_l0; /* 21*/
- sum += ( fin[8] ) * *++cos_l0; /* 17 */
- sum += ( fin[9] ) * *++cos_l0; /* 35*/
- sum += ( fin[10] ) * *++cos_l0; /* 3 */
- sum += ( fin[11] ) * *++cos_l0; /* 31 */
- sum += ( fin[12] ) * *++cos_l0; /* 7 */
- sum += ( fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[14] ) * *++cos_l0; /* 11 */
- sum += ( fin[15] ) * *++cos_l0; /* 23*/
- sum += ( fin[16] ) * *++cos_l0; /* 15 */
- sum += ( fin[17] ) * *++cos_l0; /* 19 */
- out[9]=sum;
-
- /* 10 */
- sum = ( fin[0]+fin[5]+fin[15] ) * *++cos_l0; /* 33 */
- sum += ( fin[1]+fin[4]+fin[16] ) * *++cos_l0; /* 9 */
- sum += ( fin[2]+fin[3]+fin[17] ) * *++cos_l0; /* 21 */
- sum += ( fin[6]-fin[9]+fin[14] ) * *(cos_l0+=4); /* 3 */
- sum += ( fin[7]-fin[10]+fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[8]-fin[11]+fin[12] ) * *++cos_l0; /* 15 */
- out[10]=sum;
-
- /* 11 */
- cos_l0= &cos_l[11][0];
- sum = ( fin[0] ) * *cos_l0; /* 5 */
- sum += ( fin[1] ) * *++cos_l0; /* 21 */
- sum += ( fin[2] ) * *++cos_l0; /* 25 */
- sum += ( fin[3] ) * *++cos_l0; /* 1 */
- sum += ( fin[4] ) * *++cos_l0; /*27 */
- sum += ( fin[5] ) * *++cos_l0; /* 19 */
- sum += ( fin[6] ) * *++cos_l0; /* 7 */
- sum += ( fin[7] ) * *++cos_l0; /* 33*/
- sum += ( fin[8] ) * *++cos_l0; /* 13 */
- sum += ( fin[9] ) * *++cos_l0; /* 31*/
- sum += ( fin[10] ) * *++cos_l0; /* 15 */
- sum += ( fin[11] ) * *++cos_l0; /* 11 */
- sum += ( fin[12] ) * *++cos_l0; /*35 */
- sum += ( fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[14] ) * *++cos_l0; /* 17 */
- sum += ( fin[15] ) * *++cos_l0; /* 29*/
- sum += ( fin[16] ) * *++cos_l0; /* 3 */
- sum += ( fin[17] ) * *++cos_l0; /* 23 */
- out[11]=sum;
-
- /* 12 */
- sum = ( fin[0] ) * *++cos_l0; /* 29 */
- sum += ( fin[1] ) * *++cos_l0; /* 21 */
- sum += ( fin[2] ) * *++cos_l0; /* 1 */
- sum += ( fin[3] ) * *++cos_l0; /* 23 */
- sum += ( fin[4] ) * *++cos_l0; /*27 */
- sum += ( fin[5] ) * *++cos_l0; /* 5 */
- sum += ( fin[6] ) * *++cos_l0; /* 17 */
- sum += ( fin[7] ) * *++cos_l0; /* 33*/
- sum += ( fin[8] ) * *++cos_l0; /* 11 */
- sum += ( fin[9] ) * *++cos_l0; /* 7 */
- sum += ( fin[10] ) * *++cos_l0; /* 15 */
- sum += ( fin[11] ) * *++cos_l0; /* 35 */
- sum += ( fin[12] ) * *++cos_l0; /*13 */
- sum += ( fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[14] ) * *++cos_l0; /* 31 */
- sum += ( fin[15] ) * *++cos_l0; /* 19*/
- sum += ( fin[16] ) * *++cos_l0; /* 3 */
- sum += ( fin[17] ) * *++cos_l0; /* 25 */
- out[12]=sum;
-
- /* 13 */
- sum = ( -fin[0]+fin[1]+fin[4]-fin[5]-fin[8]+fin[11]-fin[12] \
- -fin[15]+fin[16] ) * -*++cos_l0; /* 9 */
- sum += ( -fin[2]-fin[3]+fin[6]+fin[7]-fin[9]-fin[10]+fin[13] \
- +fin[14]-fin[17] ) * -cos_l[13][2]; /* 27 */
- out[13]=sum;
-
- /* 14 */
- cos_l0= &cos_l[14][0];
- sum = ( fin[0] ) * *cos_l0; /* 25 */
- sum += ( fin[1] ) * *++cos_l0; /* 33 */
- sum += ( fin[2] ) * *++cos_l0; /* 19 */
- sum += ( fin[3] ) * *++cos_l0; /* 5 */
- sum += ( fin[4] ) * *++cos_l0; /* 9 */
- sum += ( fin[5] ) * *++cos_l0; /* 23 */
- sum += ( fin[6] ) * *++cos_l0; /* 35 */
- sum += ( fin[7] ) * *++cos_l0; /* 21*/
- sum += ( fin[8] ) * *++cos_l0; /* 7 */
- sum += ( fin[9] ) * *++cos_l0; /* 11*/
- sum += ( fin[10] ) * *++cos_l0; /* 3 */
- sum += ( fin[11] ) * *++cos_l0; /* 17 */
- sum += ( fin[12] ) * *++cos_l0; /*31 */
- sum += ( fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[14] ) * *++cos_l0; /* 13 */
- sum += ( fin[15] ) * *++cos_l0; /* 1 */
- sum += ( fin[16] ) * *++cos_l0; /* 15 */
- sum += ( fin[17] ) * *++cos_l0; /* 29 */
- out[14]=sum;
-
- /* 15 */
- sum = ( fin[0] ) * *++cos_l0; /* 13 */
- sum += ( fin[1] ) * *++cos_l0; /* 3 */
- sum += ( fin[2] ) * *++cos_l0; /* 7 */
- sum += ( fin[3] ) * *++cos_l0; /* 17 */
- sum += ( fin[4] ) * *++cos_l0; /* 27*/
- sum += ( fin[5] ) * *++cos_l0; /* 35 */
- sum += ( fin[6] ) * *++cos_l0; /* 25 */
- sum += ( fin[7] ) * *++cos_l0; /* 15*/
- sum += ( fin[8] ) * *++cos_l0; /* 5 */
- sum += ( fin[9] ) * *++cos_l0; /* 23*/
- sum += ( fin[10] ) * *++cos_l0; /* 33 */
- sum += ( fin[11] ) * *++cos_l0; /* 29 */
- sum += ( fin[12] ) * *++cos_l0; /*19 */
- sum += ( fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[14] ) * *++cos_l0; /* 1 */
- sum += ( fin[15] ) * *++cos_l0; /* 11*/
- sum += ( fin[16] ) * *++cos_l0; /* 21 */
- sum += ( fin[17] ) * *++cos_l0; /* 31 */
- out[15]=sum;
-
- /* 16 */
- sum = ( fin[0]+fin[5]+fin[15] ) * *++cos_l0; /* 21 */
- sum += ( fin[1]+fin[4]+fin[16] ) * *++cos_l0; /* 27 */
- sum += ( fin[2]+fin[3]+fin[17] ) * *++cos_l0; /* 33 */
- sum += ( fin[6]-fin[9]+fin[14] ) * *(cos_l0+=4); /* 15 */
- sum += ( fin[7]-fin[10]+fin[13] ) * *++cos_l0; /* 9 */
- sum += ( fin[8]-fin[11]+fin[12] ) * *++cos_l0; /* 3 */
- out[16]=sum;
-
- /* 17 */
- cos_l0= &cos_l[17][0];
- sum = ( fin[0] ) * *cos_l0; /* 17 */
- sum += ( fin[1] ) * *++cos_l0; /* 15 */
- sum += ( fin[2] ) * *++cos_l0; /* 13 */
- sum += ( fin[3] ) * *++cos_l0; /* 11 */
- sum += ( fin[4] ) * *++cos_l0; /* 9 */
- sum += ( fin[5] ) * *++cos_l0; /* 7 */
- sum += ( fin[6] ) * *++cos_l0; /* 5 */
- sum += ( fin[7] ) * *++cos_l0; /* 3 */
- sum += ( fin[8] ) * *++cos_l0; /* 1 */
- sum += ( fin[9] ) * *++cos_l0; /* 19*/
- sum += ( fin[10] ) * *++cos_l0; /* 21 */
- sum += ( fin[11] ) * *++cos_l0; /* 23 */
- sum += ( fin[12] ) * *++cos_l0; /*25 */
- sum += ( fin[13] ) * *++cos_l0; /* 27 */
- sum += ( fin[14] ) * *++cos_l0; /* 29 */
- sum += ( fin[15] ) * *++cos_l0; /* 31*/
- sum += ( fin[16] ) * *++cos_l0; /* 33 */
- sum += ( fin[17] ) * *++cos_l0; /* 35 */
- out[17]=sum;
- }
- }
-
-